/**
 * 使datagrid的列中能显示row中的对象里的属性
 * Field：Staff.JoinDate
 **/
(function () {

    $.util.namespace("$.fn.datagrid.extensions");
var _renderRow = function (target, fields, frozen, rowIndex, rowData) {
    var opts = $.data(target, 'datagrid').options;
    var cc = [];
    if (frozen && opts.rownumbers) {
        var cellRownumber = rowIndex + 1;
        if (opts.pagination) {
            cellRownumber += (opts.pageNumber - 1) * opts.pageSize;
        }
        cc.push("<td class=\"datagrid-td-rownumber\"><div class=\"datagrid-cell-rownumber\">"   + cellRownumber + "</div></td>");
    }
    for (var i = 0; i < fields.length; i++) {
        var field = fields[i];
        var col = $(target).datagrid("getColumnOption", field);
        if (col) {
            var cellValue = getRowFieldData(rowData,field);

            var colStyler = col.styler ? (col.styler(cellValue, rowData, rowIndex) || "")   : "";
            var colStylerStr = col.hidden ? "style=\"display:none;" + colStyler  + "\"" : (colStyler ? "style=\"" + colStyler + "\"" : "");
            cc.push("<td field=\"" + field + "\" " + colStylerStr + ">");
            if (col.checkbox) {
                var colStylerStr = "";
            } else {
                var colStylerStr = "";
                if (col.align) {
                    colStylerStr += "text-align:" + col.align + ";";
                }
                if (!opts.nowrap) {
                    colStylerStr += "white-space:normal;height:auto;";
                } else {
                    if (opts.autoRowHeight) {
                        colStylerStr += "height:auto;";
                    }
                }
            }
            cc.push("<div style=\"" + colStylerStr + "\" ");
            if (col.checkbox) {
                cc.push("class=\"datagrid-cell-check ");
            } else {
                cc.push("class=\"datagrid-cell " + col.cellClass);
            }
            cc.push("\">");
            if (col.checkbox) {
                cc.push("<input type=\"checkbox\" name=\"" + field
                    + "\" value=\""
                    + (cellValue != undefined ? cellValue : "") + "\"/>");
            } else {
                if (col.formatter) {
                    cc.push(col.formatter(cellValue, rowData, rowIndex));
                } else {
                    cc.push(cellValue);
                }
            }
            cc.push("</div>");
            cc.push("</td>");
        }
    }
    return cc.join("");
};
    /**自定义函数，用于解决domain的嵌套问题   注意：此处的field肯定是字符串，但是row里面的key，可能为对象嵌套(后台加载数据)，也可能为字符串(前台页面传值)**/
    function getRowFieldData(row,field) {
        var flag = jQuery.isEmptyObject(row);
        if(flag){//如果是空行
            return row[field];
        }else{//不是空行
            if(isFieldMatchRowKey(row,field)){//如果row中包含该key
                return row[field];
            }else{//对象嵌套方式
                return eval("row['"+field.replace(/\./g,"']['")+"']");
            }
        }
    };
    /**判断列是否包含在row的key中，如果包含，说明为传值调用的刷新；如果找不到该列，说明为数据库对象嵌套的key**/
    /**数据只有两种情况，第一种:key为"a.b.c"而row的key也为"a.b.c";这种情况主要用于页面传值row(非嵌套或者用了format方法)***/
    /**第二种:key为"a.b.c"而row的key为"a['b']['c']";这种情况即为后台,或者传值调用的row(Json嵌套)的数据的组织方式***/
    function isFieldMatchRowKey(row,field) {
        var isInculde = false;
        for(var key in row){
            if(key==field){
                isInculde = true;
                break;
            }
        }
        return isInculde;
    };

$.extend($.fn.datagrid.defaults.view, {  renderRow: _renderRow
});

})(jQuery);